匹配字符
1、”.”匹配\n之外的任意一个字符;
2、\d匹配数字,即0-9;
3、\D匹配非数字;
4、\s 匹配空白字符,即空格、tab键和回车;
5、\S匹配非空白字符;
8、[] 表示某一位置上的字符可以使用的有限集合,如1[123abc]3表示第二位的可以是123abc;
表示范围是可以使用”-“,[0-9a-z]
\d == [0-9]
\D == [^0-9]
\w == [a-zA-Z0-9_]
\W == [^a-zA-Z0-9_]
9、[ ^ ]表示某一位置上的字符只要不是集合中的字符都可以,如[^123abc],只要该位上的字符不是123abc即可;
匹配数量
1、* 表示前一个字符可以出现0次或者多次;
2、+ 表示前一个字符可以出现1次或者多次,至少出现1次;
3、?表示前一个字符可以出现1次或者0次;
4、{m} 表示前一个字符需要出现m次;
5、{m,} 表示前一个字符需要出现至少m次;
6、{m,n} 表示前一个字符可以出现m到n次;
匹配字符边界
边界匹配符可以一次匹配多个字符,而无需添加括号;
1
2 比如 ^abc\d{3}abc$ 表示匹配abc开头和结尾,中间3个数字;
一般匹配多个字符是需要添加括号的:^abc(df){3}abc$,表示匹配abc开头和结尾,中间3次df;
1、^ 表示后面的第一个匹配规则作为匹配的开头;
2、$ 表示前面的最后一个匹配规则作为匹配的结尾;
3、\b 匹配单词边界,相当于字符串在此处要不是开头结尾,要不就必须是一个空格,这样才处于边界;
1 | 注意,\b表示的是边界问题,不匹配字符;如果\b不是处于匹配规则的结尾或者开头,则需要注意匹配规则中必须额外匹配空格。 |
比如,\Babc\B 表示abc的左右不能处于开头或结尾,也不能有空格。
1 |
|
比如,^hi\d{2}|^hello\w{2} 表示匹配hi开头后面跟两个数字或者hello开头,后面跟两个字母。
匹配0-100之间的数字:"[1-9]?\d?$|100$" 或者 "[1-9]\d?$|0$|100$"
1 | > 2、(ab) 匹配分组,括号内的字符串可以作为一个分组; |
比如,匹配<html><h1>hsh</h1></html>,这种类型的数据,必须使用:
<(.+)><(.+)>.+</\2></\1> 其中,\1和\2表示匹配到的第1和第2分组;
1 | > 4、 为分组取别名; |
贪婪与非贪婪
* 或+ 默认是开启贪婪模式的,也就是说,它们会尽可能的匹配多的字符;
1
2
3
4 result = re.match(r"(.*)(\d+-\d+-\d+)(\d+-\d+-\d+)","this is number 234-234-234")
result.group(1) == this is number 23
result.group(2) == 4-234-234
为满足第一个分组的贪婪,会尽可能的多匹配字符,而第二个分组虽然也是贪婪的,但是优先级较小;
非贪婪:通过在*和+后面添加?,可以关闭贪婪模式
1 | *或+后面添加?关闭贪婪模式,非贪婪模式下,会尽可能的少匹配字符串; |